﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using STLGROUP.Layers.DataAccessLayers;
using System.Data.Objects.DataClasses;
using STLGROUP.Layers.Common;

namespace STLGROUP.Layers.Presentations.FormBase
{
    /// <summary>
    /// From bindingsource base
    /// </summary>
    /// <author>Viet sang</author>
    public partial class frmBindingSource : frmBase
    {
        #region Variables

        protected bool _hasChanged = false;

        #endregion

        #region Constructors

        public frmBindingSource()
        {
            InitializeComponent();
        }

        #endregion

        #region protected virtual methods

        protected virtual int UpdateData()
        {
            return Cache.Context.SaveChanges();
        }

        protected virtual void LoadData()
        {

        }

        #endregion

        #region Private methods

        private void ConfigBeforeClose()
        {
            if (_hasChanged != false)
            {
                DialogResult result = MessageBox.Show("Bạn có muốn lưu thay đổi trước khi thoát không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (result == DialogResult.Yes)
                {
                    if (UpdateData() > 0)
                    {
                        MessageBox.Show("Cập nhật dữ liệu thành công!");
                    }
                    else
                    {
                        MessageBox.Show("Cập nhật dữ liệu thất bại!");
                    }
                }
            }
        }

        public void RollBack()
        {
            if (_bindingSource.DataSource == null)
            {
                return;
            }

            EntityObject kh=null;

            for (int i = 0; i < _bindingSource.Count; i++)
            {
                kh = (EntityObject)_bindingSource[i];
                if (kh != null)
                {
                    if (kh.EntityState == EntityState.Added || kh.EntityState == EntityState.Detached)
                    {
                        _bindingSource.RemoveAt(i);
                    }
                }
            }
        }

        #endregion

        #region Events
        private void frmBindingSource_FormClosing(object sender, FormClosingEventArgs e)
        {
            ConfigBeforeClose();
        }
        #endregion

       
      
    }
}
